﻿using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using equinoxWeb.Models;
using equinoxWeb.SearchObjects;

namespace equinoxWeb.GestionConexion
{
    public class CasoFunction
    {
        public static int getNextId()
        {
            int idCaso = 0;
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select idCaso from caso order by idCaso desc LIMIT 1 ", con);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            if (res.Read())
            {
                idCaso = res.GetInt32(0);
            }
            else
            {
                idCaso = 0;
            }
            idCaso++;
            res.Close();
            gestor.CloseConnection();
            return idCaso;
        }
        public static Caso abrirCaso(int idCaso)
        {
            Caso caso = new Caso();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idCaso,idclub,idusuario,idtipoCaso,caso.idcliente,ship,DATE_FORMAT(eta,'%d/%m/%Y'),content,location, DATE_FORMAT(fechainicio,'%d/%m/%Y'), DATE_FORMAT(fechafin,'%d/%m/%Y'), DATE_FORMAT(fechanominacion,'%d/%m/%Y'),inspector,agente, DATE_FORMAT(fechacierre,'%d/%m/%Y'),idestadocaso,nReferencia,year,codigoCliente,clubpandi,observaciones " +
                "FROM caso,cliente WHERE idcaso=@id and caso.idcliente = cliente.idcliente ", con);
            cmd.Parameters.AddWithValue("@id", idCaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            if (res.Read())
            {
                caso.IdCaso = res.GetInt32("idcaso");
                caso.Usuario = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                if (!res.IsDBNull(1))
                {
                    caso.Club = ClubFunction.abrirClub(res.GetInt32("idclub"));
                }
                else
                {
                    caso.Club = null;
                }
                caso.TipoCaso = TipoCasoFunction.abrirTipoCaso(res.GetInt32("idtipoCaso"));
                caso.Cliente = ClienteFunction.abrirCliente(res.GetInt32("idcliente"));
                caso.EstadoCaso = EstadoCasoFunction.abrirEstadoCaso(res.GetInt32("idestadocaso"));
                caso.Ship = res.IsDBNull(5) ? "" : res.GetString("ship");
                caso.ETA = res.IsDBNull(6) ? "" : res.GetString(6);
                caso.Content = res.IsDBNull(7) ? "" : res.GetString("content");
                caso.Location = res.IsDBNull(8) ? "" : res.GetString("location");
                caso.FechaInicio = res.IsDBNull(9) ? "" : res.GetString(9);
                caso.FechaFin = res.IsDBNull(10) ? "" : res.GetString(10);
                caso.FechaNominacion = res.IsDBNull(11) ? "" : res.GetString(11);
                caso.Inspector = res.IsDBNull(12) ? "" : res.GetString("inspector");
                caso.Agente = res.IsDBNull(13) ? "" : res.GetString("agente");
                caso.FechaCierre = res.IsDBNull(14) ? "" : res.GetString(14);
                caso.NReferencia = res.IsDBNull(16) ? 0 : res.GetInt32(16);
                caso.Anho = res.IsDBNull(17) ? "0000" : res.GetString(17);
                caso.RefCliente = res.IsDBNull(18) ? "" : res.GetString(18);
                caso.ClubPandI = res.IsDBNull(19) ? "" : res.GetString(19);
                caso.Observaciones = res.IsDBNull(20) ? "" : res.GetString(20);
            }
            else
                caso = null;
            res.Close();
            gestor.CloseConnection();
            return caso;
        }
        public static List<Caso> listarCasosPendientes(int idUsuario)
        {
            List<Caso> listaCasos = new List<Caso>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idCaso,idclub,idusuario,idtipoCaso,caso.idcliente,ship,DATE_FORMAT(eta,'%d/%m/%Y'),content,location, DATE_FORMAT(fechainicio,'%d/%m/%Y'), DATE_FORMAT(fechafin,'%d/%m/%Y'), DATE_FORMAT(fechanominacion,'%d/%m/%Y'),inspector,agente, DATE_FORMAT(fechacierre,'%d/%m/%Y'),idestadocaso,nReferencia,year,codigoCliente,clubpandi,observaciones " +
                " FROM caso,cliente WHERE idestadocaso = @estadoEnProgreso and idusuario=@id and caso.idcliente = cliente.idcliente order by year asc,nReferencia asc ", con);
            cmd.Parameters.AddWithValue("@estadoEnProgreso", Constantes.EstadoAbierto);
            cmd.Parameters.AddWithValue("@id", idUsuario);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            while (res.Read())
            {
                Caso caso = new Caso();
                caso.IdCaso = res.GetInt32("idcaso");
                if (caso.IdCaso == 0) continue;
                caso.Usuario = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                //caso.Club = ClubFunction.abrirClub(res.GetInt32("idclub"));
                caso.TipoCaso = TipoCasoFunction.abrirTipoCaso(res.GetInt32("idtipoCaso"));
                caso.Cliente = ClienteFunction.abrirCliente(res.GetInt32("idcliente"));
                caso.EstadoCaso = EstadoCasoFunction.abrirEstadoCaso(res.GetInt32("idestadocaso"));
                caso.Ship = res.IsDBNull(5) ? "" : res.GetString("ship");
                caso.ETA = res.IsDBNull(6) ? "" : res.GetString(6);
                caso.Content = res.IsDBNull(7) ? "" : res.GetString("content");
                caso.Location = res.IsDBNull(8) ? "" : res.GetString("location");
                caso.FechaInicio = res.IsDBNull(9) ? "" : res.GetString(9);
                caso.FechaFin = res.IsDBNull(10) ? "" : res.GetString(10);
                caso.FechaNominacion = res.IsDBNull(11) ? "" : res.GetString(11);
                caso.Inspector = res.IsDBNull(12) ? "" : res.GetString("inspector");
                caso.Agente = res.IsDBNull(13) ? "" : res.GetString("agente");
                caso.FechaCierre = res.IsDBNull(14) ? "" : res.GetString(14);
                caso.NReferencia = res.IsDBNull(16) ? 0 : res.GetInt32(16);
                caso.Anho = res.IsDBNull(17) ? "0000" : res.GetString(17);
                caso.RefCliente = res.IsDBNull(18) ? "" : res.GetString(18);
                caso.ClubPandI = res.IsDBNull(19) ? "" : res.GetString(19);
                caso.Observaciones = res.IsDBNull(20) ? "" : res.GetString(20);
                listaCasos.Add(caso);
            }
            res.Close();
            gestor.CloseConnection();
            return listaCasos;
        }

        public static List<Caso> listarCasosSinNotificar()
        {
            List<Caso> listaCasos = new List<Caso>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idCaso,idclub,idusuario,idtipoCaso,caso.idcliente,ship,DATE_FORMAT(eta,'%d/%m/%Y'),content,location, DATE_FORMAT(fechainicio,'%d/%m/%Y'), DATE_FORMAT(fechafin,'%d/%m/%Y'), DATE_FORMAT(fechanominacion,'%d/%m/%Y'),inspector,agente, DATE_FORMAT(fechacierre,'%d/%m/%Y'),idestadocaso,nReferencia,year,codigoCliente,clubpandi,observaciones " +
                " FROM caso,cliente WHERE idestadocaso = @estadoEnProgreso and correoenviado = @envio and caso.idcliente = cliente.idcliente order by year asc,nReferencia asc ", con);
            cmd.Parameters.AddWithValue("@estadoEnProgreso", Constantes.EstadoAbierto);
            cmd.Parameters.AddWithValue("@envio", Constantes.CorreoSinEnviar);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            while (res.Read())
            {
                Caso caso = new Caso();
                caso.IdCaso = res.GetInt32("idcaso");
                if (caso.IdCaso == 0) continue;
                caso.Usuario = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                //caso.Club = ClubFunction.abrirClub(res.GetInt32("idclub"));
                caso.TipoCaso = TipoCasoFunction.abrirTipoCaso(res.GetInt32("idtipoCaso"));
                caso.Cliente = ClienteFunction.abrirCliente(res.GetInt32("idcliente"));
                caso.EstadoCaso = EstadoCasoFunction.abrirEstadoCaso(res.GetInt32("idestadocaso"));
                caso.Ship = res.IsDBNull(5) ? "" : res.GetString("ship");
                caso.ETA = res.IsDBNull(6) ? "" : res.GetString(6);
                caso.Content = res.IsDBNull(7) ? "" : res.GetString("content");
                caso.Location = res.IsDBNull(8) ? "" : res.GetString("location");
                caso.FechaInicio = res.IsDBNull(9) ? "" :res.GetString(9);
                caso.FechaFin = res.IsDBNull(10) ? "" : res.GetString(10);
                caso.FechaNominacion = res.IsDBNull(11) ? "" : res.GetString(11);
                caso.Inspector = res.IsDBNull(12) ? "" : res.GetString("inspector");
                caso.Agente = res.IsDBNull(13) ? "" : res.GetString("agente");
                caso.FechaCierre = res.IsDBNull(14) ? "" : res.GetString(14);
                caso.NReferencia = res.IsDBNull(16) ? 0 : res.GetInt32(16);
                caso.Anho = res.IsDBNull(17) ? "0000" : res.GetString(17);
                caso.RefCliente = res.IsDBNull(18) ? "" : res.GetString(18);
                caso.ClubPandI = res.IsDBNull(19) ? "" : res.GetString(19);
                caso.Observaciones = res.IsDBNull(20) ? "" : res.GetString(20);
                listaCasos.Add(caso);
            }
            res.Close();
            gestor.CloseConnection();
            return listaCasos;
        }

        public static void marcarComoNotificado(int idCaso, int valor)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("UPDATE CASO SET correoenviado=@val WHERE idCaso=@id", con);
            cmd.Parameters.AddWithValue("@val", valor);
            cmd.Parameters.AddWithValue("@id", idCaso);
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }

        public static void agregarCaso(Caso casoModel)
        {
            GestorConexion gestor = new GestorConexion();
            int idCLub = (casoModel.Club == null ? 0 : casoModel.Club.IdClub);
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            casoModel.IdCaso = getNextId();
            MySqlCommand cmd;
            cmd = new MySqlCommand("Insert into caso (idCaso,nReferencia,idclub,idusuario,idtipoCaso," +
                "idcliente,ship,eta,content,location,fechainicio,fechafin,fechanominacion,inspector,agente," +
                "fechacierre,idestadocaso,year,clubpandi,correoenviado,observaciones) " +
                "values (@idCaso,@nReferencia,@idclub,@idusuario,@idtipoCaso,@idcliente,@ship," +
                "STR_TO_DATE(@eta,'%d/%m/%Y'),@content,@location,STR_TO_DATE(@fechainicio,'%d/%m/%Y'),STR_TO_DATE(@fechafin,'%d/%m/%Y'),STR_TO_DATE(@fechanominacion,'%d/%m/%Y')," +
                "@inspector,@agente,STR_TO_DATE(@fechacierre,'%d/%m/%Y'),@idestadocaso,@year,@clubpandi,0,@observaciones)", con);
            cmd.Parameters.AddWithValue("@nReferencia", casoModel.NReferencia);
            cmd.Parameters.AddWithValue("@idCaso", casoModel.IdCaso);
            if (idCLub == 0)
                cmd.Parameters.AddWithValue("@idclub", null);
            else
                cmd.Parameters.AddWithValue("@idclub", idCLub);
            cmd.Parameters.AddWithValue("@idusuario", casoModel.Usuario.IdUsuario);
            cmd.Parameters.AddWithValue("@idtipoCaso", casoModel.TipoCaso.IdTipoCaso);
            cmd.Parameters.AddWithValue("@idcliente", casoModel.Cliente.Idcliente);
            cmd.Parameters.AddWithValue("@ship", casoModel.Ship);
            cmd.Parameters.AddWithValue("@eta", casoModel.ETA);
            cmd.Parameters.AddWithValue("@content", casoModel.Content);
            cmd.Parameters.AddWithValue("@location", casoModel.Location);
            cmd.Parameters.AddWithValue("@fechainicio", casoModel.FechaInicio);
            cmd.Parameters.AddWithValue("@fechafin", casoModel.FechaFin);
            cmd.Parameters.AddWithValue("@fechanominacion", casoModel.FechaNominacion);
            cmd.Parameters.AddWithValue("@inspector", casoModel.Inspector);
            cmd.Parameters.AddWithValue("@agente", casoModel.Agente);
            cmd.Parameters.AddWithValue("@fechacierre", casoModel.FechaCierre);
            cmd.Parameters.AddWithValue("@idestadocaso", casoModel.EstadoCaso.IdEstadoCaso);
            cmd.Parameters.AddWithValue("@year", casoModel.Anho);
            cmd.Parameters.AddWithValue("@clubpandi", casoModel.ClubPandI);
            cmd.Parameters.AddWithValue("@observaciones", casoModel.Observaciones);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static void modificarCaso(Caso casoModel)
        {
            GestorConexion gestor = new GestorConexion();
            int idCLub = (casoModel.Club == null ? 0 : casoModel.Club.IdClub);
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("update caso set idclub = @idclub, nReferencia=@nReferencia, idusuario = @idusuario, idtipoCaso = @idtipoCaso, " +
                "idcliente = @idcliente, ship = @ship, eta = STR_TO_DATE(@eta,'%d/%m/%Y'), " +
                "content = @content, location = @location, fechainicio = STR_TO_DATE(@fechainicio,'%d/%m/%Y'), " +
                "fechafin = STR_TO_DATE(@fechafin,'%d/%m/%Y'), fechanominacion = STR_TO_DATE(@fechanominacion,'%d/%m/%Y'), " +
                "inspector = @inspector, agente = @agente, fechacierre = STR_TO_DATE(@fechacierre,'%d/%m/%Y'), " +
                "idestadocaso = @idestadocaso, year=@year, clubpandi=@clubpandi, correoenviado=0, observaciones=@observaciones where idCaso = @idCaso ", con);
            cmd.Parameters.AddWithValue("@nReferencia", casoModel.NReferencia);
            cmd.Parameters.AddWithValue("@idCaso", casoModel.IdCaso);
            if (idCLub == 0)
                cmd.Parameters.AddWithValue("@idclub", null);
            else
                cmd.Parameters.AddWithValue("@idclub", idCLub);
            cmd.Parameters.AddWithValue("@idusuario", casoModel.Usuario.IdUsuario);
            cmd.Parameters.AddWithValue("@idtipoCaso", casoModel.TipoCaso.IdTipoCaso);
            cmd.Parameters.AddWithValue("@idcliente", casoModel.Cliente.Idcliente);
            cmd.Parameters.AddWithValue("@ship", casoModel.Ship);
            cmd.Parameters.AddWithValue("@eta", casoModel.ETA);
            cmd.Parameters.AddWithValue("@content", casoModel.Content);
            cmd.Parameters.AddWithValue("@location", casoModel.Location);
            cmd.Parameters.AddWithValue("@fechainicio", casoModel.FechaInicio);
            cmd.Parameters.AddWithValue("@fechafin", casoModel.FechaFin);
            cmd.Parameters.AddWithValue("@fechanominacion", casoModel.FechaNominacion);
            cmd.Parameters.AddWithValue("@inspector", casoModel.Inspector);
            cmd.Parameters.AddWithValue("@agente", casoModel.Agente);
            cmd.Parameters.AddWithValue("@fechacierre", casoModel.FechaCierre);
            cmd.Parameters.AddWithValue("@idestadocaso", casoModel.EstadoCaso.IdEstadoCaso);
            cmd.Parameters.AddWithValue("@year", casoModel.Anho);
            cmd.Parameters.AddWithValue("@clubpandi", casoModel.ClubPandI);
            cmd.Parameters.AddWithValue("@observaciones", casoModel.Observaciones);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static List<Caso> buscarCaso(CasoBusqueda casoModel)
        {
            List<Caso> listaCaso = new List<Caso>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idCaso,idclub,idusuario,idtipoCaso,caso.idcliente,ship,DATE_FORMAT(eta,'%d/%m/%Y'),content,location, DATE_FORMAT(fechainicio,'%d/%m/%Y'), DATE_FORMAT(fechafin,'%d/%m/%Y'), DATE_FORMAT(fechanominacion,'%d/%m/%Y'),inspector,agente, DATE_FORMAT(fechacierre,'%d/%m/%Y'),idestadocaso,nReferencia,year,codigoCliente " +
                "FROM caso,cliente WHERE caso.idcliente = cliente.idcliente " +
                (casoModel.Idclub != 0 ? " and  idclub = @idclub" : "") +
                (casoModel.Idusuario != 0 ? " and  idusuario = @idusuario" : "") +
                (casoModel.IdtipoCaso != 0 ? " and  idtipoCaso = @idtipoCaso" : "") +
                (casoModel.Idcliente != 0 ? " and    caso.idcliente = @idcliente" : "") +
                (casoModel.Ship != null && casoModel.Ship.Length > 0 ? " and  ship  like '%' @ship '%'" : "") +
                (casoModel.ETA != null && casoModel.ETA.Length > 0 ? " and  eta = STR_TO_DATE(@eta,'%d/%m/%Y')" : "") +
                (casoModel.Content != null && casoModel.Content.Length > 0 ? " and   content  like '%' @content '%' " : "") +
                (casoModel.Location != null && casoModel.Location.Length > 0 ? " and  location  like '%' @location '%' " : "") +
                (casoModel.FechaInicioDesde != null && casoModel.FechaInicioDesde.Length > 0 ? " and  fechainicio >= STR_TO_DATE(@fechainiciodesde,'%d/%m/%Y')" : "") +
                (casoModel.FechaFinDesde != null && casoModel.FechaFinDesde.Length > 0 ? " and  fechafin >= STR_TO_DATE(@fechafindesde,'%d/%m/%Y')" : "") +
                (casoModel.FechaNominacionDesde != null && casoModel.FechaNominacionDesde.Length > 0 ? " and  fechanominacion >= STR_TO_DATE(@fechanominaciondesde,'%d/%m/%Y')" : "") +
                (casoModel.FechaInicioHasta != null && casoModel.FechaInicioHasta.Length > 0 ? " and  fechainicio <= STR_TO_DATE(@fechainiciohasta,'%d/%m/%Y')" : "") +
                (casoModel.FechaFinHasta != null && casoModel.FechaFinHasta.Length > 0 ? " and  fechafin <= STR_TO_DATE(@fechafinhasta,'%d/%m/%Y')" : "") +
                (casoModel.FechaNominacionHasta != null && casoModel.FechaNominacionHasta.Length > 0 ? " and  fechanominacion <= STR_TO_DATE(@fechanominacionhasta,'%d/%m/%Y')" : "") +
                (casoModel.Inspector != null && casoModel.Inspector.Length > 0 ? " and  inspector  like '%' @inspector '%' " : "") +
                (casoModel.Agente != null && casoModel.Agente.Length > 0 ? " and  agente = like '%' @agente '%' " : "") +
                (casoModel.FechaCierreDesde != null && casoModel.FechaCierreDesde.Length > 0 ? " and  fechacierre >= STR_TO_DATE(@fechacierredesde,'%d/%m/%Y')" : "") +
                (casoModel.FechaCierreHasta != null && casoModel.FechaCierreHasta.Length > 0 ? " and  fechacierre <= STR_TO_DATE(@fechacierrehasta,'%d/%m/%Y')" : "") +
                (casoModel.IdestadoCaso != 0 ? " and  idestadocaso = @idestadocaso" : "") + " order by year asc, nReferencia asc ", con);
            if (casoModel.Idclub != 0)
                cmd.Parameters.AddWithValue("@idclub", casoModel.Idclub);//casoModel.Club.IdClub);
            if (casoModel.Idusuario != 0)
                cmd.Parameters.AddWithValue("@idusuario", casoModel.Idusuario);
            if (casoModel.IdtipoCaso != 0)
                cmd.Parameters.AddWithValue("@idtipoCaso", casoModel.IdtipoCaso);
            if (casoModel.Idcliente != 0)
                cmd.Parameters.AddWithValue("@idcliente", casoModel.Idcliente);
            if (casoModel.Ship != null && casoModel.Ship.Length > 0)
                cmd.Parameters.AddWithValue("@ship", casoModel.Ship);
            if (casoModel.ETA != null && casoModel.ETA.Length > 0)
                cmd.Parameters.AddWithValue("@eta", casoModel.ETA);
            if (casoModel.Content != null && casoModel.Content.Length > 0)
                cmd.Parameters.AddWithValue("@content", casoModel.Content);
            if (casoModel.Location != null && casoModel.Location.Length > 0)
                cmd.Parameters.AddWithValue("@location", casoModel.Location);
            if (casoModel.FechaInicioDesde != null && casoModel.FechaInicioDesde.Length > 0)
                cmd.Parameters.AddWithValue("@fechainiciodesde", casoModel.FechaInicioDesde);
            if (casoModel.FechaFinDesde != null && casoModel.FechaFinDesde.Length > 0)
                cmd.Parameters.AddWithValue("@fechafindesde", casoModel.FechaFinDesde);
            if (casoModel.FechaNominacionDesde != null && casoModel.FechaNominacionDesde.Length > 0)
                cmd.Parameters.AddWithValue("@fechanominaciondesde", casoModel.FechaNominacionDesde);
            if (casoModel.FechaInicioHasta != null && casoModel.FechaInicioHasta.Length > 0)
                cmd.Parameters.AddWithValue("@fechainiciohasta", casoModel.FechaInicioHasta);
            if (casoModel.FechaFinHasta != null && casoModel.FechaFinHasta.Length > 0)
                cmd.Parameters.AddWithValue("@fechafinhasta", casoModel.FechaFinHasta);
            if (casoModel.FechaNominacionHasta != null && casoModel.FechaNominacionHasta.Length > 0)
                cmd.Parameters.AddWithValue("@fechanominacionhasta", casoModel.FechaNominacionHasta);
            if (casoModel.Inspector != null && casoModel.Inspector.Length > 0)
                cmd.Parameters.AddWithValue("@inspector", casoModel.Inspector);
            if (casoModel.Agente != null && casoModel.Agente.Length > 0)
                cmd.Parameters.AddWithValue("@agente", casoModel.Agente);
            if (casoModel.FechaCierreDesde != null && casoModel.FechaCierreDesde.Length > 0)
                cmd.Parameters.AddWithValue("@fechacierredesde", casoModel.FechaCierreDesde);
            if (casoModel.FechaCierreHasta != null && casoModel.FechaCierreHasta.Length > 0)
                cmd.Parameters.AddWithValue("@fechacierrehasta", casoModel.FechaCierreHasta);
            if (casoModel.IdestadoCaso != 0)
                cmd.Parameters.AddWithValue("@idestadocaso", casoModel.IdestadoCaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            while (res.Read())
            {
                Caso caso = new Caso();
                caso.IdCaso = res.GetInt32("idcaso");
                if (caso.IdCaso == 0) continue;
                caso.Usuario = UsuarioFunction.abrirUsuario(res.GetInt32("idusuario"));
                //caso.Club = ClubFunction.abrirClub(res.GetInt32("idclub"));
                caso.TipoCaso = TipoCasoFunction.abrirTipoCaso(res.GetInt32("idtipoCaso"));
                caso.Cliente = ClienteFunction.abrirCliente(res.GetInt32("idcliente"));
                caso.EstadoCaso = EstadoCasoFunction.abrirEstadoCaso(res.GetInt32("idestadocaso"));
                caso.Ship = res.IsDBNull(5) ? "" : res.GetString("ship");
                caso.ETA = res.IsDBNull(6) ? "" : res.GetString(6);
                caso.Content = res.IsDBNull(7) ? "" : res.GetString("content");
                caso.Location = res.IsDBNull(8) ? "" : res.GetString("location");
                caso.FechaInicio = res.IsDBNull(9) ? "" : res.GetString(9);
                caso.FechaFin = res.IsDBNull(10) ? "" : res.GetString(10);
                caso.FechaNominacion = res.IsDBNull(11) ? "" : res.GetString(11);
                caso.Inspector = res.IsDBNull(12) ? "" : res.GetString("inspector");
                caso.Agente = res.IsDBNull(13) ? "" : res.GetString("agente");
                caso.FechaCierre = res.IsDBNull(14) ? "" : res.GetString(14);
                caso.NReferencia = res.IsDBNull(16) ? 0 : res.GetInt32(16);
                caso.Anho = res.IsDBNull(17) ? "0000" : res.GetString(17);
                caso.RefCliente = res.IsDBNull(18) ? "" : res.GetString(18);
                listaCaso.Add(caso);
            }
            res.Close();
            gestor.CloseConnection();
            return listaCaso;
        }


        public static void cerrarCaso(int idCaso)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("update caso set fechacierre = NOW(), idestadocaso=@idestadocaso where idcaso = @idcaso", con);
            cmd.Parameters.AddWithValue("@idestadocaso", Constantes.EstadoCerrado);
            cmd.Parameters.AddWithValue("@idcaso", idCaso);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }

        public static string obtenerReferencia(int idCaso)
        {
            string referencia = "";
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select CONCAT(CAST(caso.nReferencia AS CHAR),'/',cliente.codigoCliente,'/',SUBSTRING(caso.year,2)) from caso,cliente where idCaso=@idCaso and caso.idcliente=cliente.idcliente ", con);
            cmd.Parameters.AddWithValue("@idCaso", idCaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            if (res.Read())
            {
                referencia = res.IsDBNull(0) ? "" : res.GetString(0);
            }
            res.Close();
            gestor.CloseConnection();
            if (referencia[1] == '/')
                referencia = "00" + referencia;
            if (referencia[2] == '/')
                referencia = "0" + referencia;
            return referencia;
        }

        public static bool existeCodigo(int nRef)
        {
            bool existe = false;
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select * from caso where nReferencia = @nReferencia ", con);
            cmd.Parameters.AddWithValue("@nReferencia", nRef);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            if (res.Read())
            {
                existe = true;
            }
            else
            {
                existe = false;
            }
            res.Close();
            gestor.CloseConnection();
            return existe;
        }
        public static bool existeCodigo(int nRef,int idcaso)
        {
            bool existe = false;
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select * from caso where nReferencia = @nReferencia and idCaso <> @idcaso ", con);
            cmd.Parameters.AddWithValue("@nReferencia", nRef);
            cmd.Parameters.AddWithValue("@idcaso", idcaso);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            if (res.Read())
            {
                existe = true;
            }
            else
            {
                existe = false;
            }
            res.Close();
            gestor.CloseConnection();
            return existe;
        }
    }
}